<html>
<head><meta charset="utf-8"><title>Parser Overview and Guide updates · t-compiler/wg-rustc-dev-guide · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/index.html">t-compiler/wg-rustc-dev-guide</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html">Parser Overview and Guide updates</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="192620162"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192620162" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192620162">(Apr 02 2020 at 04:37)</a>:</h4>
<p>We will have a parser overview conversation with <span class="user-mention" data-user-id="126931">@centril</span>  today @ 1:30-2pm UTC in this thread.  This will be a high-level discussion aimed at drafting the parser section of the <code>rustc-dev-guide</code> Overview chapter.  We will also discuss plans for a more detailed discussion/video lecture to expand the parser chapter in the <code>rustc-dev-guide</code>.</p>



<a name="192661930"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192661930" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192661930">(Apr 02 2020 at 13:06)</a>:</h4>
<h1>Current <code>rustc-dev-guide</code> parser documentation</h1>
<ul>
<li><a href="https://rustc-dev-guide.rust-lang.org/high-level-overview.html" title="https://rustc-dev-guide.rust-lang.org/high-level-overview.html">High-level overview of the compiler source</a> - outdated info?</li>
<li><a href="https://rustc-dev-guide.rust-lang.org/the-parser.html" title="https://rustc-dev-guide.rust-lang.org/the-parser.html">Lexing and Parsing</a> - <a href="https://github.com/rust-lang/rustc-dev-guide/pull/651/files" title="https://github.com/rust-lang/rustc-dev-guide/pull/651/files">Guide reorg underway</a> that will transition this chapter to a "Frontend Compiler" section of the Guide</li>
<li>[rustc-dev-guide Overview] - a high-level overview of the <code>rustc</code> compiler that will serve as an intro to the Guide, currently a <a href="https://github.com/rust-lang/rustc-dev-guide/pull/633" title="https://github.com/rust-lang/rustc-dev-guide/pull/633">WIP with open PR</a></li>
</ul>



<a name="192664292"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192664292" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192664292">(Apr 02 2020 at 13:24)</a>:</h4>
<h1>Discussion topics for 2020-04-02 meeting</h1>
<ul>
<li>Review source structure of the parser to update the "High level overview of the compiler source" section of the Guide and draft the parser section of the Overview</li>
<li>High level run through of the input -&gt; output during the parser stage (what comes in?, what goes out?, where does it go?)</li>
<li>Discuss how to approach / document a lecture on the parser to update the Guide chapter with more detailed information</li>
</ul>



<a name="192664534"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192664534" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192664534">(Apr 02 2020 at 13:26)</a>:</h4>
<p>My current understanding:</p>
<p>(rustc_interface) -&gt; [[ black magic ]] -&gt; ("High Level" Lexer / "Low Level" Lexer) -&gt; Token stream (<code>librustc_ast::TokenKind</code>) -&gt; [ PARSER ] -&gt; syntax well-formed -&gt; AST output -&gt; [[ black magic ]], syntax not well-formed -&gt; error handling</p>



<a name="192665179"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665179" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665179">(Apr 02 2020 at 13:31)</a>:</h4>
<p>The way I see parsing, it is a pure-ish function from  <code>TokenStream -&gt; SomeASTNode</code></p>



<a name="192665204"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665204" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665204">(Apr 02 2020 at 13:31)</a>:</h4>
<p><span aria-label="wave" class="emoji emoji-1f44b" role="img" title="wave">:wave:</span> <span class="user-mention" data-user-id="126931">@centril</span></p>



<a name="192665218"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665218" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665218">(Apr 02 2020 at 13:31)</a>:</h4>
<p><span aria-label="wave" class="emoji emoji-1f44b" role="img" title="wave">:wave:</span></p>



<a name="192665410"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665410" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665410">(Apr 02 2020 at 13:32)</a>:</h4>
<p><span class="user-mention silent" data-user-id="126931">centril</span> <a href="#narrow/stream/196385-t-compiler.2Fwg-learning/topic/Parser.20Overview.20and.20Guide.20updates/near/192665179" title="#narrow/stream/196385-t-compiler.2Fwg-learning/topic/Parser.20Overview.20and.20Guide.20updates/near/192665179">said</a>:</p>
<blockquote>
<p>The way I see parsing, it is a pure-ish function from  <code>TokenStream -&gt; SomeASTNode</code></p>
</blockquote>
<p>Let's start there with the process.   I see that there are two levels of lexers.  For the input to the parser, you are taking <code>librustc_ast::TokenKind</code>?</p>



<a name="192665417"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665417" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665417">(Apr 02 2020 at 13:32)</a>:</h4>
<p>The <code>Parser</code> internally operates on individual tokens however, using <code>self.bump()</code> to advance the cursor, and then you have e.g. <code>self.token</code> and <code>self.prev_token</code> to access stuff</p>



<a name="192665518"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665518" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665518">(Apr 02 2020 at 13:33)</a>:</h4>
<p><span class="user-mention" data-user-id="262810">@Chris Simpkins</span> Well the parser works on <a href="https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/token/struct.Token.html" title="https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/token/struct.Token.html">https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/token/struct.Token.html</a></p>



<a name="192665533"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665533" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665533">(Apr 02 2020 at 13:33)</a>:</h4>
<p>which has a <code>TokenKind</code></p>



<a name="192665597"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665597" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665597">(Apr 02 2020 at 13:34)</a>:</h4>
<p>and a <code>Token</code> has a <code>Span</code> as well, which is often used</p>



<a name="192665635"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665635" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665635">(Apr 02 2020 at 13:34)</a>:</h4>
<p>But from the outside, we can think of the parser as a function from a stream of tokens to some AST node</p>



<a name="192665662"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665662" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665662">(Apr 02 2020 at 13:34)</a>:</h4>
<p>And the parser lives in <code>rustc_parse::parser</code></p>



<a name="192665683"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665683" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665683">(Apr 02 2020 at 13:34)</a>:</h4>
<p>whereas the lexer lives mostly in <code>rustc_parse::lexer</code> and <code>rustc_lexer</code></p>



<a name="192665719"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665719" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665719">(Apr 02 2020 at 13:35)</a>:</h4>
<p>The lexers job is to produce tokens from a string</p>



<a name="192665761"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665761" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665761">(Apr 02 2020 at 13:35)</a>:</h4>
<p>(and the lexer you'll have to ask others about for the inner workings)</p>



<a name="192665969"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665969" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665969">(Apr 02 2020 at 13:37)</a>:</h4>
<p>What is the main entry point to the parser?  I tried to locate it in the source and it appears that maybe rustc_interface is calling the parser through a query function?  Can you explain at a bit higher level how the parser is integrated into the overall compiler process structure?</p>



<a name="192665984"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192665984" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192665984">(Apr 02 2020 at 13:37)</a>:</h4>
<p>Some things I think are important to mention:</p>
<ul>
<li>There are utility functions used all the time:<ul>
<li><code>fn bump</code>, <code>fn check</code>, <code>fn eat</code>, <code>fn expect</code>, <code>fn look_ahead</code></li>
<li>Even higher level: <code>parse_delim_comma_seq</code> parses a sequence of elements delimited by some <code>DelimToken</code></li>
</ul>
</li>
</ul>



<a name="192666139"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666139" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666139">(Apr 02 2020 at 13:38)</a>:</h4>
<p><span class="user-mention" data-user-id="262810">@Chris Simpkins</span>  There's a query which uses <code>rustc_interface::passes::parse</code>, but that's mostly for the entry point of the crate</p>



<a name="192666166"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666166" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666166">(Apr 02 2020 at 13:39)</a>:</h4>
<p>External modules <code>mod foo;</code> are parsed by <code>rustc_expand</code></p>



<a name="192666322"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666322" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666322">(Apr 02 2020 at 13:40)</a>:</h4>
<p>The external module parsing stuff mostly resides in <code>rustc_expand::module</code></p>



<a name="192666346"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666346" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666346">(Apr 02 2020 at 13:40)</a>:</h4>
<p>Ty!  Sorry to interrupt the discussion about the utility functions.</p>



<a name="192666390"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666390" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666390">(Apr 02 2020 at 13:41)</a>:</h4>
<p>(you'll want to grep for <code>parse_external_mod</code> as well, there's a call to it in the expansion visiting)</p>



<a name="192666407"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666407" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666407">(Apr 02 2020 at 13:41)</a>:</h4>
<p>(<code>InvocationCollector::flat_map_item</code>)</p>



<a name="192666468"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666468" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666468">(Apr 02 2020 at 13:41)</a>:</h4>
<p>Beyond this, macro expansion also calls into various "black box" parsers, e.g, <code>fn parse_expr</code></p>



<a name="192666548"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666548" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666548">(Apr 02 2020 at 13:42)</a>:</h4>
<p>And then there are parsing of the contents inside attributes, but that's a bit niche stuff</p>



<a name="192666634"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666634" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666634">(Apr 02 2020 at 13:43)</a>:</h4>
<p>Can you talk a bit about the recursive descent approach?  Where can the recursive functions be found?</p>



<a name="192666681"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666681" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666681">(Apr 02 2020 at 13:43)</a>:</h4>
<p>I'd say that important entry points inside the parser crate itself is <code>Parser::{parse_crate_mod, parse_mod}</code></p>



<a name="192666798"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666798" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666798">(Apr 02 2020 at 13:44)</a>:</h4>
<p>Sure; there are plenty of places in the parser where we have recursive grammars, e.g. expressions inside expressions, patterns inside patterns, types inside types</p>



<a name="192666840"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666840" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666840">(Apr 02 2020 at 13:44)</a>:</h4>
<p>This is handled by having various recursive functions, e.g., <code>parse_pat</code></p>



<a name="192666888"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666888" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666888">(Apr 02 2020 at 13:45)</a>:</h4>
<p>In some places we also need to handle precedence, in particular in expression parsing</p>



<a name="192666995"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192666995" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192666995">(Apr 02 2020 at 13:46)</a>:</h4>
<p>The parsing is organized by what sort of semantic construct is being parsed:</p>
<ul>
<li><code>expr.rs</code></li>
<li><code>pat.rs</code></li>
<li><code>ty.rs</code></li>
<li><code>stmt.rs</code><br>
and so on</li>
</ul>



<a name="192667030"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667030" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667030">(Apr 02 2020 at 13:46)</a>:</h4>
<p>This tries to mirror other file names in e.g., AST lowering, type checking, etc.</p>



<a name="192667159"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667159" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667159">(Apr 02 2020 at 13:47)</a>:</h4>
<p>for example <code>expr.rs</code> or an <code>expr</code> folder can be found in the parser, lowering, type checking, HAIR lowering, MIR building</p>



<a name="192667198"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667198" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667198">(Apr 02 2020 at 13:47)</a>:</h4>
<p>(though that might not apply to e.g., <code>pat.rs</code> to the same extent, and other things)</p>



<a name="192667328"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667328" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667328">(Apr 02 2020 at 13:48)</a>:</h4>
<p>For error handling, the parser uses the standard <code>DiagnosticBuilder</code> API, but we try to recover, parsing a superset of Rust's grammar, while also emitting an error</p>



<a name="192667395"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667395" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667395">(Apr 02 2020 at 13:49)</a>:</h4>
<p>Recovery means that we try to return <code>Ok(recovered_ast_node)</code> instead of <code>Err(...)</code> which will get bubbled up using <code>self.parse_foobar()?</code></p>



<a name="192667534"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667534" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667534">(Apr 02 2020 at 13:50)</a>:</h4>
<p>The standard parser method signature is some form of:</p>
<div class="codehilite"><pre><span></span><span class="w">    </span><span class="k">fn</span> <span class="nf">parse_foobar</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="p">...)</span><span class="w"> </span>-&gt; <span class="nc">PResult</span><span class="o">&lt;</span><span class="na">&#39;a</span><span class="p">,</span><span class="w"> </span><span class="n">Foobar</span><span class="o">&gt;</span><span class="p">;</span><span class="w"></span>
</pre></div>



<a name="192667643"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667643" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667643">(Apr 02 2020 at 13:51)</a>:</h4>
<p>Another thing of note is that when adding new syntax, e.g., for a new language feature, it needs to be <em>pre-expansion</em> feature gated</p>



<a name="192667678"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667678" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667678">(Apr 02 2020 at 13:51)</a>:</h4>
<p>What struct(s) is/are passed to the next stage of the compile process on the out side of the parser?</p>



<a name="192667771"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667771" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667771">(Apr 02 2020 at 13:52)</a>:</h4>
<p>AST nodes are the output of parsing; e.g., <code>rustc_ast::ast::{Crate, Mod, Expr, Pat, ...}</code></p>



<a name="192667811"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667811" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667811">(Apr 02 2020 at 13:52)</a>:</h4>
<p>The most important top level parsers would be producing <code>Crate</code> or <code>Mod</code></p>



<a name="192667845"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667845" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667845">(Apr 02 2020 at 13:52)</a>:</h4>
<p>but the black box parsers include <code>Expr</code>, <code>Item</code>, <code>Pat</code>, <code>Ty</code>, etc. (corresponding to various macro fragments)</p>



<a name="192667899"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667899" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667899">(Apr 02 2020 at 13:53)</a>:</h4>
<p>Very helpful.  Ty</p>



<a name="192667948"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192667948" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192667948">(Apr 02 2020 at 13:53)</a>:</h4>
<p>To do pre-expansion gating, we use e.g.,</p>
<div class="codehilite"><pre><span></span><span class="bp">self</span><span class="p">.</span><span class="n">sess</span><span class="p">.</span><span class="n">gated_spans</span><span class="p">.</span><span class="n">gate</span><span class="p">(</span><span class="n">sym</span>::<span class="n">or_patterns</span><span class="p">,</span><span class="w"> </span><span class="n">some_span</span><span class="p">);</span><span class="w"></span>
</pre></div>


<p>This corresponds to some appropriate span to feature gate, for the feature <code>#![feature(or_patterns)]</code></p>



<a name="192668073"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668073" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668073">(Apr 02 2020 at 13:54)</a>:</h4>
<p>this collects a set of spans, which we then use in <code>rustc_ast_passes::feature_gate::check_crate</code></p>



<a name="192668217"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668217" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668217">(Apr 02 2020 at 13:55)</a>:</h4>
<p>After having parsed the AST, we then also do macro expansion, AST validation, feature gating, name resolution, some early linting, and finally we lower to HIR</p>



<a name="192668340"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668340" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668340">(Apr 02 2020 at 13:56)</a>:</h4>
<p>As I noted before, this is a bit circular, as macro expansion calls out for external module parsing and the various black box parsers</p>



<a name="192668388"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668388" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668388">(Apr 02 2020 at 13:56)</a>:</h4>
<p>Can you give an example of a syntax validation that is performed and elicits an error?  What is the general type of validation used at the parser stage?</p>



<a name="192668447"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668447" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668447">(Apr 02 2020 at 13:57)</a>:</h4>
<p>I think we shouldn't think of what the parser does as <em>validation</em> (see e.g., <a href="https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/" title="https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/">https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/</a> )</p>



<a name="192668464"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668464" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668464">(Apr 02 2020 at 13:57)</a>:</h4>
<p>Short on time so I will make this the last question so that you can get to the compiler meeting <span aria-label="slight smile" class="emoji emoji-1f642" role="img" title="slight smile">:slight_smile:</span></p>



<a name="192668574"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668574" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668574">(Apr 02 2020 at 13:58)</a>:</h4>
<p><span class="user-mention silent" data-user-id="126931">centril</span> <a href="#narrow/stream/196385-t-compiler.2Fwg-learning/topic/Parser.20Overview.20and.20Guide.20updates/near/192668447" title="#narrow/stream/196385-t-compiler.2Fwg-learning/topic/Parser.20Overview.20and.20Guide.20updates/near/192668447">said</a>:</p>
<blockquote>
<p>I think we shouldn't think of what the parser does as <em>validation</em> (see e.g., <a href="https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/" title="https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/">https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/</a> )</p>
</blockquote>
<p>What is an "error" then?</p>



<a name="192668676"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668676" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668676">(Apr 02 2020 at 13:58)</a>:</h4>
<p>The parser might check that we're at some appropriate token, eat it, and then produce an AST</p>



<a name="192668698"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668698" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668698">(Apr 02 2020 at 13:59)</a>:</h4>
<p>or it might decide that there was an unexpected token, and produce an error</p>



<a name="192668740"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668740" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668740">(Apr 02 2020 at 13:59)</a>:</h4>
<p>But this is driven by parsing some structure</p>



<a name="192668770"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668770" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668770">(Apr 02 2020 at 13:59)</a>:</h4>
<p>which is different than what AST validation does (takes a whole AST and does various checks)</p>



<a name="192668853"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668853" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668853">(Apr 02 2020 at 14:00)</a>:</h4>
<p>Anyways... compiler meeting :D</p>



<a name="192668890"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668890" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668890">(Apr 02 2020 at 14:00)</a>:</h4>
<p>Thank you very much for your time!</p>



<a name="192668916"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668916" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668916">(Apr 02 2020 at 14:00)</a>:</h4>
<p><span aria-label="slight smile" class="emoji emoji-1f642" role="img" title="slight smile">:slight_smile:</span></p>



<a name="192668943"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192668943" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192668943">(Apr 02 2020 at 14:00)</a>:</h4>
<p>I really appreciate it <span class="user-mention" data-user-id="126931">@centril</span></p>



<a name="192669067"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192669067" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Chris Simpkins <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192669067">(Apr 02 2020 at 14:01)</a>:</h4>
<p>I'll r=you when I have a draft of the Overview documentation if you don't mind having a look</p>



<a name="192669100"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser%20Overview%20and%20Guide%20updates/near/192669100" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/196385-t-compiler/wg-rustc-dev-guide/topic/Parser.20Overview.20and.20Guide.20updates.html#192669100">(Apr 02 2020 at 14:01)</a>:</h4>
<p>sure cc me any time</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>